package admin

import (
	"game-server/app/common/request"
	"game-server/app/common/response"
	"game-server/app/services"

	"github.com/gin-gonic/gin"
)

// TagList 标签列表
// @Summary 标签列表
// @Description 标签列表
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagListRequest true "请求参数"
// @Router /gameServer/admin/tag/list [post]
func TagList(c *gin.Context) {
	var form request.TagListRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	res, err := services.TagService.GetTagList(form)
	if err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	response.Success(c, res)
}

// TagAdd 添加标签
// @Summary 添加标签
// @Description 添加标签
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagAddRequest true "请求参数"
// @Router /gameServer/admin/tag/add [post]
func TagAdd(c *gin.Context) {
	var form request.TagAddRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	if err := services.TagService.CreateTag(form); err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	response.Success(c, nil)
}

// TagUpdate 更新标签
// @Summary 更新标签
// @Description 更新标签
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagUpdateRequest true "请求参数"
// @Router /gameServer/admin/tag/update [post]
func TagUpdate(c *gin.Context) {
	var form request.TagUpdateRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	if err := services.TagService.UpdateTag(form); err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	response.Success(c, nil)
}

// TagDel 删除标签
// @Summary 删除标签
// @Description 删除标签
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagDelRequest true "请求参数"
// @Router /gameServer/admin/tag/del [post]
func TagDel(c *gin.Context) {
	var form request.TagDelRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	if err := services.TagService.DeleteTag(form); err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	response.Success(c, nil)
}

// TagAll 获取所有标签
// @Summary 获取所有标签
// @Description 获取所有标签
// @Tags 标签管理
// @Accept json
// @Produce json
// @Router /gameServer/admin/tag/all [get]
func TagAll(c *gin.Context) {
	tags, err := services.TagService.GetAllTags()
	if err != nil {
		response.BusinessFail(c, err.Error())
		return
	}
	response.Success(c, tags)
}

// TagFrontAll
// @Summary 获取所有标签
// @Description 获取所有标签
// @Tags 标签管理
// @Accept json
// @Produce json
// @Router /gameServer/front/tag/all [get]
func TagFrontAll(c *gin.Context) {
	tags, err := services.TagService.TagFrontAll()
	if err != nil {
		response.BusinessFail(c, err.Error())
		return
	}
	response.Success(c, tags)
}

// TagFrontList 前台标签分页列表
// @Summary 前台标签分页列表
// @Description 前台标签分页列表
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagFrontListRequest true "请求参数"
// @Router /gameServer/front/tag/list [post]
func TagFrontList(c *gin.Context) {
	var form request.TagFrontListRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	res, err := services.TagService.TagFrontList(form)
	if err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	response.Success(c, res)
}

// TagDel 根据tagid获取有该tag的游戏
// @Summary 根据tagid获取有该tag的游戏
// @Description 根据tagid获取有该tag的游戏
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagGameListRequest true "请求参数"
// @Router /gameServer/front/tag/taggame [post]
func TagGameList(c *gin.Context) {
	var form request.TagGameListRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return
	}

	res, err := services.TagService.GetTagGameList(form)
	if err != nil {
		response.BusinessFail(c, err.Error())
		return
	}

	tagItem, _ := services.TagService.GetTagById(form.ID)

	response.Success(c, gin.H{
		"list":  res.List,
		"total": res.Total,
		"tag":   tagItem,
	})
}

// TagBatchAddGame
// @Summary 标签批量添加游戏
// @Description 标签批量添加游戏
// @Tags 标签管理
// @Accept json
// @Produce json
// @Param data body request.TagBatchAddGameRequest true "请求参数"
// @Router /gameServer/admin/tag/batchaddgame [post]
func TagBatchAddGame(c *gin.Context) {
	var form request.TagBatchAddGameRequest
	if err := c.ShouldBindJSON(&form); err != nil {
		response.ValidateFail(c, request.GetErrorMsg(form, err))
		return

	}

	if err := services.TagService.BatchAddGame(form); err != nil {
		response.BusinessFail(c, err.Error())
		return
	}
	response.Success(c, nil)
}
